package com.hzit.manager.service.impl;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.hzit.manager.service.ISpecificationOptionService;
import com.ruoyi.common.core.constant.HzitConstants;
import com.ruoyi.system.api.domain.SpecificationOption;
import com.ruoyi.system.api.domain.TypeTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import com.hzit.manager.mapper.TypeTemplateMapper;
import com.hzit.manager.service.ITypeTemplateService;

/**
 * 模板管理Service业务层处理
 * 
 * @author hbxfwf
 * @date 2024-03-07
 */
@Service
public class TypeTemplateServiceImpl implements ITypeTemplateService 
{
    @Autowired
    private TypeTemplateMapper typeTemplateMapper;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private ISpecificationOptionService optionService;
    /**
     * 查询模板管理
     * 
     * @param id 模板管理主键
     * @return 模板管理
     */
    @Override
    public TypeTemplate selectTypeTemplateById(Long id)
    {
        return typeTemplateMapper.selectTypeTemplateById(id);
    }

    /**
     * 查询模板管理列表
     * 
     * @param typeTemplate 模板管理
     * @return 模板管理
     */
    @Override
    public List<TypeTemplate> selectTypeTemplateList(TypeTemplate typeTemplate)
    {
        return typeTemplateMapper.selectTypeTemplateList(typeTemplate);
    }

    /**
     * 新增模板管理
     * 
     * @param typeTemplate 模板管理
     * @return 结果
     */
    @Override
    public int insertTypeTemplate(TypeTemplate typeTemplate)
    {
        return typeTemplateMapper.insertTypeTemplate(typeTemplate);
    }

    /**
     * 修改模板管理
     * 
     * @param typeTemplate 模板管理
     * @return 结果
     */
    @Override
    public int updateTypeTemplate(TypeTemplate typeTemplate)
    {
        return typeTemplateMapper.updateTypeTemplate(typeTemplate);
    }

    /**
     * 批量删除模板管理
     * 
     * @param ids 需要删除的模板管理主键
     * @return 结果
     */
    @Override
    public int deleteTypeTemplateByIds(Long[] ids)
    {
        return typeTemplateMapper.deleteTypeTemplateByIds(ids);
    }

    /**
     * 删除模板管理信息
     * 
     * @param id 模板管理主键
     * @return 结果
     */
    @Override
    public int deleteTypeTemplateById(Long id)
    {
        return typeTemplateMapper.deleteTypeTemplateById(id);
    }

    //1. 查询模板时，以模板id为key，以品牌列表为值放到redis中
    //2. 查询模板时，以模板id为key，以规格及规格选项列表放到redis中
	@Override
	public List<TypeTemplate> findAll() {
        //1.1 查询所有模板列表
        List<TypeTemplate> typeTemplates = this.selectTypeTemplateList(null);
        //1.2 遍历模板
        for (TypeTemplate template : typeTemplates) {
            //1.2.1 以模板id为key，品牌列表为值放到redis中
            redisTemplate.opsForHash().put(HzitConstants.BRAND_LIST,template.getId() + "",template.getBrandIds());
            //1.2.2 以模板id为key，以规格及规格选项列表为值放到redis中
            String specIds = template.getSpecIds();
            List<Map> maps = JSON.parseArray(specIds, Map.class);
            for (Map map : maps) {
                String id = map.get("id").toString();       // 规格id
                // 根据规格id查询出规格选项列表
                // 设置规格id作为查询条件（外键查询）
                SpecificationOption option = new SpecificationOption();
                option.setSpecId(new Long(id));
                // 根据规格id查询出对应的规格选项列表
                List<SpecificationOption> options = optionService.selectSpecificationOptionList(option);
                // 将规格选项列表放到map中
                map.put("options",options);
            }
            //1.2.3 将List<Map>转换为字符串放到redis中 (将规格及规格选项放到redis中)
            redisTemplate.opsForHash().put(HzitConstants.SPEC_LIST,template.getId() + "",JSON.toJSONString(maps));
        }
        return typeTemplates;
	}
}
